
import java.util.ArrayList;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Jose Luis Orta
 */
public class ConjPares {
    ArrayList<Par> v;
    private String nombre;

    /**
     * @return the nombre
     */
    public ConjPares(){
        v=new ArrayList<Par>();
    }
    /**
     * Consultora del atributo nombre
     * @return String - Es el nombre del conjunto
     */
    public String getNombre() {
        return nombre;
    }

    /**Selectora de nombre
     * @param nombre El nombre del conjunto
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    /**
     * Añade un par al conjunto de pares.
     * Añade el par s1,s2
     * @param s1 Es la primera cadena del par
     * @param s2 Es la segunda cadena del par
     */
    public void anadirPar(String s1,String s2){
        anadirPar(s1,s2,1);
    }
     /**
     * Añade un par al conjunto de pares.
     * Añade el par s1,s2
     * @param s1 Es la primera cadena del par
     * @param s2 Es la segunda cadena del par
     * @param s2 Es el peso que se sumará (repeticiones)
     */
    public void anadirPar(String s1, String s2, int peso){
        Par p = new Par(s1,s2);
        buscarYAnadir(s1,s2,peso);
    }

    public void anadirParDef(String s1, String s2, int peso){
        Par p = new Par(s1,s2, peso);
        anadirPar(p);
    }

    public void anadirPar(Par p){
        v.add(p);
    }
    
    /**
     * Elimina un par del conjunto.
     * 0<=i<longitud()
     * @param i Es el indice del par que queremos quitar
     */
    public void quitarPar(int i){
       if (i>=0 && i<v.size()) v.remove(i);
    }
    /**
     * Obtiene cuantas veces aparece el par i en el conjunto.
     * 0<=i<longitud()
     * @param i Es el indice del par
     */
    public int getContadorPar(int i){
        return v.get(i).getcontador();
    }
    /**
     * Busca un par en el conjunto
     * @param s1 Es la primera cadena del par
     * @param s1 Es la segunda cadena del par
     * @return int - El indice del par buscado, -1 si el par no existe
     */
    public int buscarPar(String s1,String s2){
        Par p = new Par(s1,s2);
        int i=0;
        boolean enc=false;
        while (i<v.size() && !enc){
            if(p.getc1().equals(v.get(i).getc1()) && p.getc2().equals(v.get(i).getc2()))
                   enc=true;
            i++;
        }
        if (enc) return i-1;
        else return -1;
    }

    public int buscarParYAnadir(String s1,String s2, int peso){
        int i=0;
        boolean enc=false;
        while (i<v.size() && !enc){
            if(s1.equals(v.get(i).getc1()) && s2.equals(v.get(i).getc2())){
                enc=true;
                int cont = v.get(i).getcontador();
                cont += peso;
                v.get(i).setcontador(cont);
            }
            i++;
        }
        if (enc) return i-1;
        else {
            Par paux = new Par(s1,s2,peso);
            v.add(paux);
            return -1;
        }
    }

    /**
     * Obtiene un objeto de la clase par del conjunto.
     * @param i El indice del par 0<=i<longitud()
     */
    public Par getPar(int i){
        return v.get(i);
    }

    public String[] getParS (int i) {
        String[] res = new String [3];
        Par aux = v.get(i);
        res [0] = aux.getc1();
        res [1] = aux.getc2();
        res [2] = String.valueOf(aux.getcontador());
        return res;
    }
    /**
     * Consultora del tamaño del conjunto.
     * Obtenemos cuantos elementos (pares) tiene el conjunto
     * @return int - Un entero con el numero de pares del conjunto
     */
    public int longitud(){
        return v.size();
    }

    public void modificarPar (int i, String s1, String s2) {
        v.get(i).setc1(s1);
        v.get(i).setc2(s2);
    }
    public String[][] getPares(int i, int k){
        ArrayList<String []> arr = new ArrayList<String[] >();
        int ii=i;
        while (ii<v.size() && ii<(i+k)){
            String[] s = new String[3];
            s[0]=v.get(ii).getc1();
            s[1]=v.get(ii).getc2();
            s[2]=String.valueOf(v.get(ii).getcontador());
            arr.add(s);
            ii++;
        }
        String[][] r = new String[arr.size()][3];
        r=arr.toArray(r);
        return r;
    }

    void decrementarPar(int i) {
            int cont = v.get(i).getcontador();
            if (cont == 1) v.remove(i);
            else {
                --cont;
                Par p = new Par (v.get(i).getc1(), v.get(i).getc2(), cont);
                v.remove(i);
                v.add(p);
            }
    }

    /* ------------------- Privadas -----------------------------*/
    private void buscarYAnadir(String s1, String s2, int peso){
        int rbuscar = buscarPar(s1,s2);
        if (rbuscar>-1){
            Par p=v.get(rbuscar);
            p.setcontador(p.getcontador()+peso);
        } else {
            Par p = new Par(s1,s2,peso);
            v.add(p);
        }
    }
    

}
